package easy;

import java.util.Arrays;

public class leetcode350_02 {
    /*
        两个数组的交集
        给定两个数组，编写一个函数计算他们的交集
     */
    public static void main(String[] args) {

    }

    /**
     * 结语
     *   如果将所有的元素存储在磁盘上，磁盘内存是有限的，
     *   并且你不能一次加载所有的元素到内存中。那么就无法高效地对其进行排序
     *   因此推荐使用方法一而不是方法二。在方法一中，
     *   只关系到查询操作，因此每次读取 数组中的一部分数据，并进行处理即可
     */
    public static int[] intersect(int[] nums1, int[] nums2) {
        //对两个数组进行排序
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int p1 = 0;
        int p2 = 0;
        //定义结果数组
        int[] result = new int[Math.min(nums1.length, nums1.length)];
        int index = 0;
        while (p1 < nums1.length && p2 < nums2.length) {
            if (nums1[p1] > nums2[p2]) {
                p2++;
            } else if (nums1[p1] < nums2[p2]) {
                p1++;
            } else {
                result[index++] = nums1[p1];
                p1++;
                p2++;
            }
        }
        //返回需要的值
        return Arrays.copyOfRange(result, 0, index);
    }

}
